source("Analyses.R")
## Registered S3 method overwritten by 'rmutil':
## method from
## print.response httr
## Find out more at https://www.synthpop.org.uk/
## Loading required package: future
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ readr 2.1.5
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## Loading required package: viridisLite
##
##
## Attaching package: 'plotly'
##
##
## The following object is masked from 'package:ggplot2':
##
## last_plot
##
##
## The following object is masked from 'package:stats':
##
## filter
##
##
## The following object is masked from 'package:graphics':
##
## layout
##
##
##
## Attaching package: 'pracma'
##
##
## The following objects are masked from 'package:tictoc':
##
## clear, size, tic, toc
##
##
## The following object is masked from 'package:purrr':
##
## cross
##
##
##
## Attaching package: 'rmarkdown'
##
##
## The following object is masked from 'package:future':
##
## run
## List of 7
## $ sample :List of 500
## $ cart :List of 500
## $ ctree :List of 500
## $ parametric:List of 500
## $ bag :List of 500
## $ rf :List of 500
## $ original :'data.frame': 4603 obs. of 22 variables:
## ..- attr(*, "na.action")= 'omit' Named int [1:363] 15 16 59 60 87 105 195 205 209 224 ...
## .. ..- attr(*, "names")= chr [1:363] "15" "16" "59" "60" ...
analyses$table_cat
## # A tibble: 378 × 13
## # Groups: variable [16]
## variable modalites freq_min freq_max freq_mean freq_sd freq_cv freq_median
## <chr> <fct> <int> <int> <dbl> <dbl> <dbl> <dbl>
## 1 agegr 16-24 568 720 649. 24.2 0.0372 650
## 2 agegr 25-34 630 756 684. 22.8 0.0333 684
## 3 agegr 35-44 644 808 703. 23.0 0.0327 702
## 4 agegr 45-59 1161 1334 1245. 29.7 0.0239 1246
## 5 agegr 60-64 417 530 476. 20.2 0.0425 477
## 6 agegr 65+ 780 917 846. 26.7 0.0315 846
## 7 alcabuse YES 245 338 299. 15.6 0.0522 299
## 8 alcabuse NO 4265 4358 4304. 15.6 0.00363 4304
## 9 alcsol YES 123 189 156. 12.4 0.0793 156
## 10 alcsol NO 4414 4480 4447. 12.4 0.00278 4447
## # ℹ 368 more rows
## # ℹ 5 more variables: freq_q1 <dbl>, freq_q3 <dbl>, freq_q025 <dbl>,
## # freq_q975 <dbl>, methode <chr>
analyses$table_mean_num
## # A tibble: 6 × 61
## age_min age_max age_mean age_sd age_cv age_median age_q1 age_q3 age_q025
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 46.6 48.2 47.5 0.279 0.00588 47.4 47.3 47.7 47.0
## 2 46.6 48.2 47.5 0.279 0.00588 47.4 47.3 47.7 47.0
## 3 46.6 48.2 47.5 0.279 0.00588 47.4 47.3 47.7 47.0
## 4 46.6 48.2 47.5 0.279 0.00588 47.4 47.3 47.7 47.0
## 5 46.6 48.2 47.5 0.279 0.00588 47.4 47.3 47.7 47.0
## 6 46.6 48.2 47.5 0.279 0.00588 47.4 47.3 47.7 47.0
## # ℹ 52 more variables: age_q975 <dbl>, depress_min <dbl>, depress_max <dbl>,
## # depress_mean <dbl>, depress_sd <dbl>, depress_cv <dbl>,
## # depress_median <dbl>, depress_q1 <dbl>, depress_q3 <dbl>,
## # depress_q025 <dbl>, depress_q975 <dbl>, nofriend_min <dbl>,
## # nofriend_max <dbl>, nofriend_mean <dbl>, nofriend_sd <dbl>,
## # nofriend_cv <dbl>, nofriend_median <dbl>, nofriend_q1 <dbl>,
## # nofriend_q3 <dbl>, nofriend_q025 <dbl>, nofriend_q975 <dbl>, …
analyses$cor_comp
## $sample
## age depress nofriend height weight bmi
## age 0.00000000 0.63147506 0.04816559 0.29474835 0.14432612 0.34027067
## depress 0.63147506 0.00000000 0.09723474 0.26871532 0.03145997 0.20112105
## nofriend 0.04816559 0.09723474 0.00000000 0.08190366 0.05873079 0.01663399
## height 0.29474835 0.26871532 0.08190366 0.00000000 0.49396542 0.08285834
## weight 0.14432612 0.03145997 0.05873079 0.49396542 0.00000000 0.81735280
## bmi 0.34027067 0.20112105 0.01663399 0.08285834 0.81735280 0.00000000
##
## $cart
## age depress nofriend height weight
## age 0.000000e+00 0.0034625067 0.007126650 0.0001931979 8.584560e-06
## depress 3.462507e-03 0.0000000000 0.020201859 0.0007591334 1.292374e-03
## nofriend 7.126650e-03 0.0202018586 0.000000000 0.0157008276 9.708402e-03
## height 1.931979e-04 0.0007591334 0.015700828 0.0000000000 2.835172e-03
## weight 8.584560e-06 0.0012923743 0.009708402 0.0028351716 0.000000e+00
## bmi 5.814970e-03 0.0039337433 0.001577024 0.0247964247 7.982318e-04
## bmi
## age 0.0058149701
## depress 0.0039337433
## nofriend 0.0015770245
## height 0.0247964247
## weight 0.0007982318
## bmi 0.0000000000
##
## $ctree
## age depress nofriend height weight
## age 0.0000000000 0.004433319 0.03079406 0.001512454 0.0007750606
## depress 0.0044333191 0.000000000 0.06030914 0.022464804 0.0073575092
## nofriend 0.0307940626 0.060309138 0.00000000 0.021738038 0.0281159102
## height 0.0015124537 0.022464804 0.02173804 0.000000000 0.0090735884
## weight 0.0007750606 0.007357509 0.02811591 0.009073588 0.0000000000
## bmi 0.0002322522 0.005214166 0.01897374 0.014367597 0.0045497753
## bmi
## age 0.0002322522
## depress 0.0052141660
## nofriend 0.0189737418
## height 0.0143675968
## weight 0.0045497753
## bmi 0.0000000000
##
## $parametric
## age depress nofriend height weight
## age 0.000000000 0.007714712 0.014681761 0.003200841 0.010056606
## depress 0.007714712 0.000000000 0.010808531 0.004848264 0.028897161
## nofriend 0.014681761 0.010808531 0.000000000 0.003685481 0.003859754
## height 0.003200841 0.004848264 0.003685481 0.000000000 0.011638121
## weight 0.010056606 0.028897161 0.003859754 0.011638121 0.000000000
## bmi 0.002370864 0.021800867 0.013845272 0.057643420 0.012537707
## bmi
## age 0.002370864
## depress 0.021800867
## nofriend 0.013845272
## height 0.057643420
## weight 0.012537707
## bmi 0.000000000
##
## $bag
## age depress nofriend height weight
## age 0.0000000000 0.001710253 0.0019313069 0.0002058442 0.002148336
## depress 0.0017102533 0.000000000 0.0145395413 0.0029108221 0.004076937
## nofriend 0.0019313069 0.014539541 0.0000000000 0.0004175649 0.001332971
## height 0.0002058442 0.002910822 0.0004175649 0.0000000000 0.001852351
## weight 0.0021483364 0.004076937 0.0013329706 0.0018523508 0.000000000
## bmi 0.0064809368 0.005229491 0.0016666100 0.0176921062 0.004093548
## bmi
## age 0.006480937
## depress 0.005229491
## nofriend 0.001666610
## height 0.017692106
## weight 0.004093548
## bmi 0.000000000
##
## $rf
## age depress nofriend height weight
## age 0.0000000000 0.130504373 0.009120415 0.0002058442 0.018812762
## depress 0.1305043725 0.000000000 0.020490702 0.0206234401 0.008193821
## nofriend 0.0091204149 0.020490702 0.000000000 0.0081823232 0.001867974
## height 0.0002058442 0.020623440 0.008182323 0.0000000000 0.026778473
## weight 0.0188127622 0.008193821 0.001867974 0.0267784732 0.000000000
## bmi 0.0192883137 0.019270555 0.001627250 0.0495285223 0.078375501
## bmi
## age 0.01928831
## depress 0.01927055
## nofriend 0.00162725
## height 0.04952852
## weight 0.07837550
## bmi 0.00000000
analyses$somme_cor_mat
## sample cart ctree parametric bag rf
## [1,] 7.217924 0.1964182 0.4598228 0.4151787 0.1325772 0.8257405
liste_mat est une liste de 6 matrices. Ces matrices sont les matrices de corrélations moyenne des simulations pour chaque modèles moins la matrice de corrélation du jeu de données original.
somme_cor_mat est la somme des éléments de chaque matrices. Plus la valeur est proche de 0 plus les synthétisations conservent de bonnes corrélations.
bag et cart sont ici les meilleurs modèles suivis par parametric, ctree et rf. Sample est loin derrière.
analyses$table_mae
## sex agegr placesize edu socprof marital ls
## sample 27.198 19.76133 18.06667 22.741 15.87200 14.12333 14.85371
## cart 26.410 19.95400 19.85800 26.969 17.42800 14.36200 15.67943
## ctree 25.768 19.95400 18.13200 27.467 16.89867 14.32067 15.11143
## parametric 38.040 23.06400 20.13800 25.893 21.19022 17.54667 16.31657
## bag 40.754 19.95400 192.17333 78.989 59.63378 89.88933 93.87543
## rf 41.788 24.06933 152.09933 70.988 57.74089 90.39200 75.44000
## depress trust trustfam trustneigh sport smoke alcabuse
## sample 9.464909 21.28000 13.53733 23.32267 26.298 23.796 12.494
## cart 9.673273 22.26133 14.54933 23.84267 26.454 25.848 13.238
## ctree 9.507455 18.89733 13.90000 23.69067 26.174 24.004 14.090
## parametric 14.076364 20.45333 15.87467 24.86400 26.360 23.884 13.456
## bag 9.418909 287.26133 174.53733 320.54400 166.342 296.732 144.102
## rf 9.896000 229.05467 151.76533 216.84000 161.964 263.904 149.360
## alcsol wkabint englang
## sample 10.018 10.090667 21.31867
## cart 9.866 9.973333 22.88000
## ctree 10.018 9.808000 21.46667
## parametric 9.338 14.757333 22.69200
## bag 86.020 113.845333 120.91867
## rf 89.668 116.432000 133.30267
On remarque que bag et rf ont des MAE très élevé allant jusqu’à être 10 fois supérieurs aux autres modèles. Sample, cart, ctree et parametric sont assez rapprochés sans qu’il n’y ait une réelle domination d’un modèle.
analyses$table_mse
## age nofriend height weight bmi
## sample 682.0771 103.7079 172.1206 452.3489 44.75372
## cart 682.0771 105.3914 172.0991 451.5839 44.57135
## ctree 682.0771 104.0041 172.1269 452.5496 45.17828
## parametric 682.0771 100.3660 171.4877 449.5742 51.54974
## bag 682.0771 102.5413 172.0911 451.3268 44.31593
## rf 682.0771 105.6129 172.0911 449.1485 43.84288
On ne voit pas de réelle domination d’un modèle.
On va vérifier deux choses :
Est-ce que dans les jeux de données synthétiques la variable bmi est bien synthétisé, i.e est-ce qu’elle respecte bmi = 10000 * (weight / height ^ 2) ?
Est-ce que les valeurs de la variable bmi synthétisée sont proches de celles de la variable bmi originale ?
source("~/work/synthetic-data-sdc/R/fonctions/Graphiques_bmi.R")
bmi_comp(data)
## sample cart ctree parametric bag
## Comparaison synth/synth 141.030740 -3.265265 4.803583 -2.208551 -1.878455
## Comparaison synth/org -0.336147 -5.714436 5.493749 36.180675 -4.459721
## rf
## Comparaison synth/synth 32.36226
## Comparaison synth/org 15.89352
On constate une assez bonne synthétisation via cart, ctree, parametric et bag, une moins bonne synthétisation via rf et une vraiment moins bonne synthétisation via sample. On n’a cependant pas une valeur de 0 ce qui signifie que le modèle s’approche de la relation mais ne la reproduit pas totalement.
En ce qui concerne la comparaison au jeu de données original, sample, cart, ctree et bagging s’en sortent le mieux, suivis par rf puis parametric.
analyses$reg_coeff[2, ]
## sample cart ctree parametric bag
## -0.0007895939 0.9840424029 0.9816971902 1.0823844138 0.9853631891
## rf
## 0.8362827945
reg_coeff est un vecteur comportant la moyenne des coefficients directeurs pour chaque modèles.
On voit que bag, cart et ctree sont très proches, suivis par parametric (x5), rf(x11). Sample est à la ramasse
source("~/work/synthetic-data-sdc/R/fonctions/Densites.R")
modele = "sample"
num_dataset = 1
plot_nuage_bmi(modele, num_dataset)
plot_reg_bmi()
## NULL
plot_dens_comb(data, "bmi")
plot_dens_syn_org(data, "bmi")
## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
##
## [[5]]
##
## [[6]]
plot_dens_syn_org(data, "height")
## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
##
## [[5]]
##
## [[6]]
plot_dens_syn_org(data, "weight")
## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
##
## [[5]]
##
## [[6]]
Les densités de sample, cart, et ctree sont très ressemblantes. Celles
de bag et rf le sont entre elles.
On remarque des pics sur les densités, on regarde donc les densités de height et weight pour voir s’ils viennent de là et en effet c’est le cas.
dens_bmi()
## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
##
## [[5]]
##
## [[6]]
densite_diff(data, "bmi")[[1]]
## sample cart ctree
## Moyenne différence d'aires -4.455338e-06 -4.272978e-06 -5.168769e-06
## Ecart-type différence d'aires 3.549734e-06 4.937459e-06 3.143970e-06
## Somme différence d'aires 2.493844e-03 2.674153e-03 2.755653e-03
## parametric bag rf
## Moyenne différence d'aires -3.057157e-06 -4.983608e-06 -4.992414e-06
## Ecart-type différence d'aires 1.757596e-06 3.216030e-06 4.769962e-06
## Somme différence d'aires 1.574548e-03 2.733771e-03 2.953782e-03
bp_densite(data, "bmi")
for (i in 1:length(varsnum)) {
print(bp_densite(data, varsnum[i]))
}
On constate que parametric est le modèle ayant l’aire moyenne de la
densité de la variable bmi se rapprochant le plus de la densité de la
variable bmi originale. Il est aussi le modèle ayant la plus petite
variabilité. Cart est le modèle ayant la plus grande variabilté.
analyses$utility_measures_all_meth
## # A tibble: 3,000 × 5
## pMSE SPECKS PO50 U method
## <dbl> <dbl> <dbl> <dbl> <chr>
## 1 0.172 0.808 40.4 20114953 sample
## 2 0.181 0.837 41.8 20261681 sample
## 3 0.168 0.800 40.0 20024184. sample
## 4 0.179 0.829 41.4 20247699 sample
## 5 0.175 0.818 40.9 20107545 sample
## 6 0.180 0.834 41.7 20242382. sample
## 7 0.175 0.817 40.8 20150422. sample
## 8 0.167 0.801 40.0 19979623 sample
## 9 0.179 0.830 41.5 20208644. sample
## 10 0.175 0.819 41.0 20183083 sample
## # ℹ 2,990 more rows
source("~/work/synthetic-data-sdc/R/fonctions/Utilite.R")
moycum_mesures()
distribution_mesures()
## [[1]]
## Warning: `position_dodge()` requires non-overlapping x intervals.
##
## [[2]]
## Warning: `position_dodge()` requires non-overlapping x intervals.
##
## [[3]]
## Warning: `position_dodge()` requires non-overlapping x intervals.
##
## [[4]]
## Warning: `position_dodge()` requires non-overlapping x intervals.
resume_mesures()
1) Sur le premier graphique, on remarque que les moyennes cumulées se
stabilisent très rapidement. On remarque de plus que cart est le
meilleur modèle en terme de pMSE. Il est suivi par rf, bag et ctree.
Parametric arrive ensuite avec un pMSE environ 2 fois plus élevé. Enfin,
sample a un pMSE d’environ de l’ordre de 7 fois supérieur.
On constate que pour la plupart des modèles, l’étendue du pMSE est relativement contenue à l’exception de sample. Cart est ici le meilleur et sample est le moins bon et de loin.
Concernant le SPECKS, on obtient les mêmes conclusions que pour le pMSE. On rappelle que le SPECKS est défini par : \[SPECKS = \sup_{\hat{p}}|F_{t=0}(\hat{p}_i) - \hat{F}_{t=1}(\hat{p}_i)|\] où \(F\) est la fonction de répartition
De même pour le PO50. On rappelle qu’il est défini par : \[PO50 = 100 \frac{\sum_i t_i(\hat{p}_i>c) + (1-t_i)(\hat{p}_i<c)}{\sum_i (\hat{p}_i \neq c)} - 50\]
Enfin, pour le U, la différence est moins flagrante mais toujours avec sample en dernière place. On rappelle qu’il est défini par : La somme des rangs de \(\hat{p}_i\) où \(t_i = 1\) dans l’ordre de \(\hat{p}_i\)
analyses$nb_repliques_all_meth %>%
group_by(method) %>%
summarise(across(n_replicats, list(mean=mean, min=min, max=max, sd=sd)))
## # A tibble: 6 × 5
## method n_replicats_mean n_replicats_min n_replicats_max n_replicats_sd
## <chr> <dbl> <int> <int> <dbl>
## 1 bag 10.8 1 19 3.34
## 2 cart 1.03 0 6 1.04
## 3 ctree 0.002 0 1 0.0447
## 4 parametric 0 0 0 0
## 5 rf 0.388 0 3 0.612
## 6 sample 0 0 0 0
Les modèles parametric et sample ne produisent aucun individu répliqué. Pour ctree, sur 500 synthétisations, 1 jeu de données possède au moins un individu répliqué Cart produit en moyenne 1 jeu de données